package com.yowasa.xiuxian.engine.message.activity;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import com.google.common.collect.Lists;
import com.yowasa.xiuxian.annoations.CMD;
import com.yowasa.xiuxian.engine.BattleEngine;
import com.yowasa.xiuxian.engine.message.CmdMessageHandler;
import com.yowasa.xiuxian.entity.bo.battle.BattleContent;
import com.yowasa.xiuxian.entity.bo.user.UserBO;
import com.yowasa.xiuxian.entity.enums.StageEnum;
import com.yowasa.xiuxian.entity.mys.SendMessage;
import com.yowasa.xiuxian.entity.po.XiuXianExtend;
import com.yowasa.xiuxian.exception.HandlerException;
import com.yowasa.xiuxian.service.RedisService;
import com.yowasa.xiuxian.service.helper.BattleHelper;
import com.yowasa.xiuxian.service.helper.ExtendHelper;
import com.yowasa.xiuxian.service.helper.MessageHelper;
import com.yowasa.xiuxian.service.helper.UserHelper;
import com.yowasa.xiuxian.util.StrUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;


@CMD(name = "/活动")
public class ActivityHandler extends CmdMessageHandler {
    @Autowired
    private MessageHelper messageHelper;
    @Autowired
    private UserHelper userHelper;
    @Autowired
    private BattleEngine battleEngine;
    @Autowired
    private BattleHelper battleHelper;
    @Autowired
    private ExtendHelper extendHelper;
    @Autowired
    private RedisService redisService;


    @Override
    public void execute(SendMessage message) {
        throw new HandlerException("活动已结束");
    }
//        UserBO userBO = userHelper.checkOpUser(message);
//        List<String> params = getAllParam(message);//获取名称
//        if (StringUtils.isEmpty(params.get(0))) {
//            messageHelper.replyMys(message, "可以在后面追加 详情 签到 挑战 排行榜 许愿池 等二级指令进行后续操作");
//            return;
//        }
//        if (userBO.getStage() == 1) {
//            throw new HandlerException("为防止小号乱刷，凡人无法参与活动");
//        }
//        if ("详情".equals(params.get(0))) {
//            StringBuffer sb = new StringBuffer();
//            sb.append("      国庆特典补偿活动\n\n")
//                    .append("活动一：累计登陆，欢赏流华！\n每日签到可获得原石奖励，七日签到总计获得1000原石\n")
//                    .append("活动二：战争热诚，御敌！\n活动期间内可参与boss挑战，获得丰厚奖励\n")
//                    .append("每天可挑战一次，对战boss强度与自身境界有关\n")
//                    .append("每个境界都有对应的伤害排行榜，每日结算\n")
//                    .append("排行榜前十会获得额外奖励,发入邮箱\n")
//                    .append("活动三：赌狗的狂欢！\n")
//                    .append("向许愿池内投入摩拉或历练值，也许有意想不到的收获\n")
//                    .append("真正虔诚的赌狗，说不定会收到幸运女神的眷顾哦");
//            messageHelper.replyMys(message, sb.toString());
//        }
//        if ("签到".equals(params.get(0))) {
//            if (extendHelper.checkSign(userBO.getId())) {
//                Integer i = extendHelper.getSignNum(userBO.getId());
//                ArrayList<Integer> integers = Lists.newArrayList(100, 100, 100, 100, 100, 200, 300);
//                Integer num;
//                try {
//                    num = integers.get(i);
//                } catch (Exception e) {
//                    num = 0;
//                }
//                XiuXianExtend byAccountId = extendHelper.getByAccountId(userBO.getId());
//                byAccountId.setRough(byAccountId.getRough() + num);
//                byAccountId.setResin(byAccountId.getResin() + 1);
//                extendHelper.updateExtendById(byAccountId);
//                extendHelper.insertSign(userBO.getId());
//                messageHelper.replyMys(message, "这是你签到的第" + (i + 1) + "天，获得了1个原粹树脂和" + num + "原石");
//            } else {
//                throw new HandlerException("今天已经签到过啦，明天再来吧");
//            }
//        }
//        if ("挑战".equals(params.get(0))) {
//            userHelper.checkOpUserAndCd(message);
//            UserBO secondUser = userHelper.getByUserId((8090 + userBO.getStage()) + "");
//            BattleContent battle = battleEngine.battle(userBO, secondUser);
//
//            int i = battle.getSecond().getBattleInfo().getHp() - battle.getSecond().getBattleInfo().getChp();
//
//            battleHelper.syncUserState(battle);
//            Integer integer = extendHelper.insertOrUpdateDamage(userBO, i);
//
//            StringBuffer msg = new StringBuffer();
//            msg.append("你合计造成了" + i + "点伤害\n");
//            int daysA = battleHelper.calCostTime(battle);
//            userHelper.lockUser(battle.getFirst().getUserBO(), daysA, "正在挑战活动副本");
//            if(integer == 1){
//                battle.getFirst().getUserBO().getUserConfig().setTravel(battle.getFirst().getUserBO().getUserConfig().getTravel() + 500);
//                msg.append("你获得了每日活动挑战奖励，500历练值\n");
//            }
//            userHelper.saveUserInfo(battle.getFirst().getUserBO());
//            msg.append(battle.getMsgLog().stream().collect(Collectors.joining("\n")));
//            messageHelper.replyMys(message, msg.toString());
//
//        }
//        if ("排行榜".equals(params.get(0))) {
//            //排行榜 境界
//            if (params.size() < 2) {
//                throw new HandlerException("正确指令格式为 /活动 排行榜  境界\n可以写境界名称或境界编号，1-9\n排行榜奖励每日晚11点结算，请及时挑战，11-12点参与将不计入排名");
//            }
//            try {
//                StageEnum stageEnum = StageEnum.getByName(params.get(1));
//                if (ObjectUtil.isNull(stageEnum)) {
//                    stageEnum = StageEnum.getById(Integer.parseInt(params.get(1)));
//                }
//                List<Map<String, Object>> a = extendHelper.listDamage(stageEnum.getLevel());
//                StringBuffer sb = new StringBuffer();
//                sb.append(stageEnum.getName()).append("排行榜\n");
//                sb.append("名称").append("          ").append("伤害").append("\n");
//                a.forEach(e -> {
//                    sb.append(e.get("name")).append("    ").append(e.get("damage")).append("\n");
//                });
//                messageHelper.replyMys(message, sb.toString());
//
//            } catch (Exception e) {
//                throw new HandlerException("输入有误，请校验");
//            }
//
//        }
//        if ("许愿池".equals(params.get(0))) {
//
//
//            String cacheKey = "mys:xiuxian:userInfo:duboQAQ:" + userBO.getId();
//
//            boolean b = redisService.hasKey(cacheKey);
//            if (b) {
//                throw new HandlerException("许愿池还在CD中，请过会儿再来，cd为5分钟");
//            }
//            redisService.set(cacheKey, true, 300);
//            //许愿池  摩拉/历练  数量  大/小
//            if (params.size() < 4) {
//                throw new HandlerException("正确指令格式为 /活动 许愿池  投入数量  摩拉/历练  大/小 \n 默认为投入摩拉");
//            }
//            Integer num = Math.abs(StrUtil.checkAndConvert2Int(params.get(1), "数量"));
//            int i = RandomUtil.randomInt(1, 7);
//            boolean flag = false;
//            if ((params.get(3).equals("小") && i <= 3) || (params.get(3).equals("大") && i > 3)) {
//                flag = true;
//            }
//
//            if (params.get(2).equals("历练")) {
//                if (userBO.getUserConfig().getTravel() < num) {
//                    throw new HandlerException("没有足够的历练值");
//                }
//                if (flag) {
//                    userBO.getUserConfig().setTravel(userBO.getUserConfig().getTravel() + num);
//                } else {
//                    userBO.getUserConfig().setTravel(userBO.getUserConfig().getTravel() - num);
//                }
//
//            } else {
//                if (userBO.getUserConfig().getGold() < num) {
//                    throw new HandlerException("没有足够的摩拉");
//                }
//                if (flag) {
//                    userBO.getUserConfig().setGold(userBO.getUserConfig().getGold() + num);
//                } else {
//                    userBO.getUserConfig().setGold(userBO.getUserConfig().getGold() - num);
//                }
//
//            }
//            String a = flag ? "赢了,获得了" : "输了，失去了";
//
//            userHelper.saveUserInfo(userBO);
//
//            String url;
//            switch (i) {
//                case 1:
//                    url = "https://upload-bbs.miyoushe.com/upload/2023/10/9/254576762/W3mF4YalpfT9QULt/touzi1.png";
//                    break;
//                case 2:
//                    url = "https://upload-bbs.miyoushe.com/upload/2023/10/9/254576762/ELWmUsukUj0k15cw/touzi2.png";
//                    break;
//                case 3:
//                    url = "https://upload-bbs.miyoushe.com/upload/2023/10/9/254576762/wRkpt8Wa75YtDOsB/touzi3.png";
//                    break;
//                case 4:
//                    url = "https://upload-bbs.miyoushe.com/upload/2023/10/9/254576762/MVC1fZGamXQSrGHh/touzi4.png";
//                    break;
//                case 5:
//                    url = "https://upload-bbs.miyoushe.com/upload/2023/10/9/254576762/ofaJvB5zu6H84UW8/touzi5.png";
//                    break;
//                case 6:
//                    url = "https://upload-bbs.miyoushe.com/upload/2023/10/9/254576762/fWNveTEEZKQVCGrj/touzi6.png";
//                    break;
//                default:
//                    url = "https://upload-bbs.miyoushe.com/upload/2023/10/9/254576762/W3mF4YalpfT9QULt/touzi1.png";
//                    break;
//            }
////            String s = (String) redisService.get(key);
//            messageHelper.imageSendMys(message, url);
//            messageHelper.replyMys(message, "骰子掷出了" + i + "点，你" + a + params.get(2) + num);
//
//        }
//    }

    public String desc() {
        return "深渊挑战";
    }


}
